package sys

import (
	"github.com/gofiber/fiber/v2"
	"github.com/mozillazg/go-pinyin"
	"go-web2/app/common/config"
	"go-web2/app/common/util"
	"go-web2/app/model/sys"
	"strings"
)

type RoleController struct{}

// 角色列表分页
func (RoleController) GetPage(c *fiber.Ctx) error {
	role := sys.SysRole{}
	role.RoleKey = c.Query("code")
	role.RoleName = c.Query("name")
	pageSize := c.QueryInt("pageSize", 10)
	pageNum := c.QueryInt("pageNum", 1)
	return c.Status(200).JSON(config.Success(role.GetPage(pageSize, pageNum)))
}

// 根据id获取角色
func (RoleController) GetById(c *fiber.Ctx) error {
	role := sys.SysRole{}
	role.Id = c.Params("id")
	role.GetById()
	return c.Status(200).JSON(config.Success(role))
}

// 生成角色代码
func (RoleController) CreateCode(c *fiber.Ctx) error {
	roleName := c.Query("roleName")
	p := pinyin.NewArgs()
	p.Style = pinyin.FirstLetter
	roleKey := util.ConvertToPinyin(roleName, p)
	return c.Status(200).JSON(config.Success(roleKey))
}

// 新增角色
func (RoleController) Insert(c *fiber.Ctx) error {
	role := sys.SysRole{}
	if err := c.BodyParser(&role); err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	role.Token = c.Get(config.TokenHeader)
	err := role.Insert()
	if err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	return c.Status(200).JSON(config.Success(nil))
}

// 修改角色
func (RoleController) Update(c *fiber.Ctx) error {
	role := sys.SysRole{}
	if err := c.BodyParser(&role); err != nil {
		//log.Error(err.Error())
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	err := role.Update()
	if err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	return c.Status(200).JSON(config.Success(nil))
}

// 修改角色状态
func (RoleController) UpdateState(c *fiber.Ctx) error {
	role := sys.SysRole{}
	if err := c.BodyParser(&role); err != nil {
		//log.Error(err.Error())
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	err := role.UpdateState()
	if err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	return c.Status(200).JSON(config.Success(nil))
}

// 删除角色
func (RoleController) Delete(c *fiber.Ctx) error {
	role := sys.SysRole{}
	if err := c.BodyParser(&role); err != nil {
		//log.Error(err.Error())
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	ids := strings.Split(role.Id, ",")
	if err := role.Delete(ids); err != nil {
		return c.Status(200).JSON(config.Error(err.Error()))
	}
	return c.Status(200).JSON(config.Success(nil))
}

// 角色下拉列表
func (RoleController) GetSelectList(c *fiber.Ctx) error {
	role := sys.SysRole{}
	return c.Status(200).JSON(config.Success(role.GetSelectList()))
}
